import router from "@/router";
import { getToken } from "@/utils/webStorage";
import { useUserStore } from "@/store";

// 匹配views里面所有的.vue文件
const modules = import.meta.glob('@/pages/**/*.vue')
// 白名单
const whiteList = ["/login"];
// 是否已加载路由
let routerIsLoaded = false;
// 是否加载本地路由
const isLocal = import.meta.env.VITE_API_ISLOCAL === 'true'

// 加载路由
export const loadRoute = async () => {
    const userStore = useUserStore();
    await userStore.getMenu(isLocal);
    routerIsLoaded = true;
};

// 路由导航
router.beforeEach((to, from, next) => {
    // 判断是否登录
    if (getToken() || isLocal) {
        if (to.path === '/login') {
            next({ path: '/' })
        } else if (whiteList.indexOf(to.path) !== -1) {
            // 在免登录白名单，直接进入
            next()
        } else {
            if (useUserStore().routes.length == 0) {
                useUserStore().getUserInfo().then(() => {
                    useUserStore().getMenu().then(accessRoutes => {
                        accessRoutes.forEach(route => {
                            router.addRoute(route) // 动态添加可访问路由表
                        })
                        console.log(to, '===to');
                        
                        next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
                    })
                }).catch(err => {
                    useUserStore().logOut().then(() => {
                        ElMessage.error(err)
                        next({ path: '/' })
                    })
                })
            } else {
                next()
            }
        }
    } else {
        // 未登录
        if (whiteList.indexOf(to.path) !== -1) {
            // 在免登录白名单，直接进入
            next()
        } else {
            next(`/login`) // 否则全部重定向到登录页
        }
    }
});